En esta ocasión lo que haremos será continuar aprendiendo a usar la biblioteca para análisis de datos llamada Pandas!!
En la introducción de pandas vimos Series, 'Data Frames' y como crearlos, además vimos como podemos acceder a un subgrupo de elementos tanto en series como en data frames. Está sesión va a estar más enfocada a ver como manipular y ordenar tus datos y análisis estadísticos básicos.
Sin más preámbulo comenzamos!!! :)
Iniciaremos cargando los paquetes necesarios y creando unos arreglos de datos.
In [1]:
#Cargamos los paquetes necesarios
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
In [3]:
#Creamos arreglos de datos por un arreglo de numpy
arreglo = np.random.randn(7,4)
columnas = list('ABCD')
df = pd.DataFrame(arreglo, columns=columnas )
df
Out[3]:
In [11]:
#Creamos arreglo de datos por diccionario
df2 = pd.DataFrame({'Orden':list(range(5)),'Valor': np.random.random_sample(5),
'Categoría':['a', 'a', np.nan, 'b', 'b']})
In [12]:
df2
Out[12]:
In [14]:
#Creamos arreglo de datos desde archivo existente
df3 = pd.read_csv('titanic.csv', header=0)
df3.head()
Out[14]:
Ya que tenemos hechos nuestros arreglos, ahora vamos a ver las características generales de ellos...
In [15]:
#¿cuáles son los índices?
df.index
Out[15]:
In [16]:
#¿cuáles son las etiquetas?
df.columns
Out[16]:
In [17]:
#¿qué valores contiene mi arreglo?
df.values
Out[17]:
In [20]:
# Ahora vamos a ver un resumen de nuestros datos
df.describe()
Out[20]:
In [21]:
#si quieres saber qué más hace este método ejecuta este comando
df.describe?
In [ ]:
In [ ]:
In [23]:
#Ordenamiento por valores en las columnas
df2.sort_values(by='Valor')
Out[23]:
In [24]:
#Ordenamiento por etiquetas de las columnas
df.sort_index(axis=1, ascending=False)
Out[24]:
In [ ]:
In [ ]:
Cuando analizas datos no siempre van a estar todos ordenaditos, filtrados y arreglados de tal modo que tu puedas hacer las computaciones necesarias para el anális. De hecho lo más frecuente es que te encuentres con datos faltantes o valores innecesarios o cosas que no quieres y/o necesitas para tu análisis.
Como ejemplo toma el segundo data frame que hicimos, te das cuenta que hay un 'NaN' por ahí que simplemente representa un valor faltante.
¿Qué harías en este caso?
y una vez que decidiste hacerlo, ¿Cómo lo lograrías?
Por suerte pandas tiene unos métodos para encontrar valores específicos o faltantes, y formas de lidiar con ellos...
In [25]:
# Primero vamos a buscar valores específicos en una columna de nuestros datos
df2.Categoría.isin(['A', 'B', 'b'])
Out[25]:
In [26]:
# Ahora veremos en todo el arreglo
df2.isin(['A', 'B', 'b'])
Out[26]:
In [27]:
# Busquemos valores vacíos
pd.isnull(df2)
Out[27]:
In [28]:
# ¿qué hacemos con este? ¿lo botamos?
df2.dropna(how='any')
Out[28]:
In [29]:
# ¿o lo llenamos diferente?
df2.fillna(value='c')
Out[29]:
In [30]:
#obtener promedio por columna
df.mean()
Out[30]:
In [31]:
#obtener promedio por fila
df.mean(1)
Out[31]:
In [33]:
#varianza por columna
df.var()
Out[33]:
In [34]:
#varianza por fila
df.var(1)
Out[34]:
In [38]:
#Frecuencia de valores en una columna específica (series)
df2.Categoría.value_counts()
Out[38]:
In [42]:
#Aplicar una función para todo el data frame
print(df)
df.apply(np.sum) #suma por columna
Out[42]:
In [44]:
df.apply(np.square) # elevar valores al cuadrado
Out[44]:
In [45]:
#solo para comprobar
0.131053**2
Out[45]:
Con el data frame de Pyladies haz lo siguiente:
In [ ]:
In [ ]:
In [ ]:
In [56]:
#Concatenar los dos data frames
pd.concat([df, df2])
Out[56]:
In [57]:
#ahora por columnas
pd.concat([df, df2], axis=1)
Out[57]:
Hay muchos otros métodos más para combinar data frames los cuales podemos encontrar en la siguiente página
Hay veces que tenemos datos sobre los cuales queremos operar los cuales pueden dividirse en un subgrupo de categorías. Para esto usamos la herramienta 'Groupby'.
Cuando pensamos en agrupamiento podemos hacer referencia a las siguientes situaciones:
In [60]:
#Agruparemos el tercer data frame por sobrevivencia
df3.groupby('Survived').mean()
Out[60]:
In [61]:
df3.head()
Out[61]:
In [62]:
#ahora lo agruparemos por sobrevivencia y sexo
df3.groupby(['Survived', 'Sex']).mean()
Out[62]:
In [ ]: